package com.r.pan.service;

import com.r.pan.entity.dto.RegisterFormDTO;
import com.r.pan.entity.po.EmailCode;
import com.baomidou.mybatisplus.extension.service.IService;
import com.r.pan.enums.OperateType;

/**
 * <p>
 * 邮箱验证码 服务类
 * </p>
 *
 * @author r-pocky
 * @since 2024-12-16
 */
public interface IEmailCodeService extends IService<EmailCode> {

    /**
     * 设置邮箱的所有验证码信息为已使用
     *
     * @param email 邮箱
     */
    void setAllCodeUsed(String email);

    /**
     * 向邮箱发送验证码，调用具体执行发送逻辑的方法sendCodeToEmail(String email, String code)
     *
     * @param email 邮箱
     * @param type  验证码类型：注册/找回密码
     */
    void sendCodeToEmail(String email, Integer type);

    /**
     * 注册账号
     *
     * @param registerFormDTO 注册表单DTO类
     */
    void register(RegisterFormDTO registerFormDTO);

    /**
     * 具体执行发送验证码到指定邮箱的代码逻辑
     *
     * @param email       邮箱
     * @param code        验证码
     * @param operateType 发送该邮箱验证码的操作目的类型
     */
    void sendCodeToEmail(String email, String code, OperateType operateType);

    /**
     * 验证码该邮箱及其邮箱验证码是否匹配
     *
     * @param email 邮箱
     * @param code  验证码
     */
    void checkEmailCode(String email, String code);
}
